package com.ruoyi.system.domain;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.JSONObjectPro;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.typehandler.LatLngTypeHandler;
import com.ruoyi.common.core.domain.LatLng;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.ObjectUtils;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 电子围栏对象 t_electric_fence
 * 
 * @author wp
 * @date 2023-08-10
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
@ToString
@TableName(value = "t_electric_fence", autoResultMap = true, excludeProperty = "remark")
public class ElectricFence extends BaseEntity {

    /** ID */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /** 所属作业公司 */
    @ApiModelProperty("所属公司ID（多个用英文逗号）")
    private String companyId;

    /** 名称 */
    @ApiModelProperty("名称")
    private String name;

    /** 类型 0：圆形 1:矩形 2：多边形:3：线形  */
    @ApiModelProperty("类型 0：圆形 1:矩形 2：多边形:3：线形 ")
    private Integer type;

    /** GeoXY */
    @ApiModelProperty("xyWgs84(根据自己的坐标系选择，编辑时另一个字段要置空)")
    @TableField(typeHandler = LatLngTypeHandler.class)
    private List<LatLng> xyWgs84;

    /** MapXY */
    @ApiModelProperty("xyGcj02(根据自己的坐标系选择，编辑时另一个字段要置空)")
    @TableField(typeHandler = LatLngTypeHandler.class)
    private List<LatLng> xyGcj02;

    /** 半径 */
    @ApiModelProperty("半径")
    private Long radius;

    /** 地址 */
    @ApiModelProperty("地址")
    private String address;

    @ApiModelProperty("所属作业公司")
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty("创建人")
    @TableField(exist = false)
    private String createUserName;
    @ApiModelProperty("绑定状态(0未绑定，1已绑定)")
    @TableField(exist = false)
    private Integer bindStatus;
    @ApiModelProperty("报警规则ID")
    @TableField(exist = false)
    @JsonIgnore
    private Long alarmRuleId;
    @ApiModelProperty("围栏类型集合")
    @TableField(exist = false)
    @JsonIgnore
    private List<Integer> types;

    /**
     * APP由于代码不能改，此处对APP做兼容
     * @param list
     * @return
     */
    public static List<JSONObject> toAppModel(List<ElectricFence> list){
        if (ObjectUtils.isEmpty(list)) return Collections.emptyList();
        return list.stream().map(i -> i.toJsonObject()
                .put("gmtCreate", DateUtils.parseDateTime(i.getCreateTime()))
                .put("createUserName", i.getCreateUserName())
                .put("mapxy", new JSONObjectPro().put("aoLatLng", i.getXyGcj02()))
        ).collect(Collectors.toList());
    }
}
